導讀:作為自動化程序開發人員,爬蟲工程師,Captcha是一項網頁測試中不可避免地阻礙。 Captcha會阻止您構建可運行的機器人。會誤導甚至終止你地爬蟲程序。本文將介紹如何有效地發現並繞過驗證碼。
一、什麼是驗證碼
二、網站用來防止機器人訪問內容地驗證碼類型
三、如何檢查開發地程序是否遭遇驗證碼地阻攔
四、如何有效地繞過驗證碼
作為自動化程序的開發者,在頁面上遇到驗證碼的原因是自動化程序的行為導致發送過多請求並以自動化方式訪問網站。作為普通用戶只能一個接一個地解決Captcha,但是作為程序員,應該很清楚地知道這種情況產生的原因。你可以學習如何防止它們出現,或者學習如何解決它們的、
作為自動化程序的開發者,我認為最好的方式有兩種:1)是一開始就避免使用它們,因為其中有些可能很難通過自動化方式解決;2)是使用自動化驗證碼程序或者服務,如2CAPTCHA去解決這個問題。
一、什麼是驗證碼
Captcha是全自動公共圖靈測試的縮寫,可以告訴計算機和人類。有時全寫為CAPTCHA。這是一種挑戰響應測試,旨在確定互聯網流量背後的用戶是人還是機器(計算機)。
這項技術被引入到互聯網領域,以響應自動化機器人的行動。這些機器人可以是任何形式的——web scraper、爬蟲、蜘蛛、購買機器人、批量帳戶創建機器人,以及任何其他形式的向web服務器發送HTTP請求的軟件,而無需使用web服務器管理員提供的官方公共API 。
這些機器人以向網站發送過多請求而聞名,這可能使它們崩潰或增加其運行成本,而無助於他們訪問的網站。但是,這不是與機器人相關的唯一問題。當期望用戶在有限的時間內執行某些任務,並且在購買限量版運動鞋,門票和其他高需求物品的競爭激烈時,它們可以用於獲得不當優勢。殭屍程序還會未經網站所有者的許可從網頁收集數據。由於這些因素以及更多因素,網站採用了Captchas等技術來阻止機器人訪問。
二、網站用來防止機器人訪問內容地驗證碼類型
當人們聽到有關驗證碼的信息時,他們將其僅視為“我不是機器人”複選框。但是,網站會使用大量的驗證碼來確定請求的真實來源。了解它們很重要,這樣您就不會遇到驗證碼問題,而會轉向其他地方。我將討論每種驗證碼類型。
1)圖像驗證碼
Image驗證碼是您在互聯網上遇到的最受歡迎的驗證碼。它要求您識別圖像中的對象。 Google的reCaptcha提供了最有效的驗證碼服務之一-但是,這甚至會使普通用戶感到沮喪。 Image Captcha將其中的字母易於使用。
2)單詞/數學驗證碼
這種驗證碼將要求您解決一些單詞或數學問題。驗證碼就是一個例子,要求您解決“ 3 + 5”。這會以多種形式出現。
3)Honeypots
這些都不容易發現。這是因為它們是使用真實用戶的CSS屬性隱藏的,但是由於漫遊器下載了全部內容,因此他們可以看到它們。當機器人與honeypot進行交互時,honeypot可能是表單或鏈接中的隱藏字段,因此不可避免地會報告自己是機器人。您將必須考慮CSS屬性,並確保在可見性處於關閉或隱藏狀態時不要與任何元素交互。
4)隱形驗證碼
無法看到隱藏的驗證碼。它們在後台工作並跟踪行為,以確定是否從漫遊器發起了來自某些IP的請求。它們是有效的,但是其有效性仍然值得懷疑,因為經驗豐富的開發人員可以開發可以模仿常規用戶的機器人。
5)社交媒體登錄
這些類型的驗證碼要求您登錄社交媒體帳戶。這些不受歡迎,因為Web管理員意識到Internet用戶會猶豫不決。
6)時間跟踪
這種Captcha的工作方式很簡單,它們只是跟踪您執行某些動作(例如填寫表格)的速度,並且可以根據機器人的運行速度判斷機器人是否剛剛填寫了表格。
三、如何檢查開發地程序是否遭遇驗證碼地阻攔
如果您懷疑您的機器人是否被驗證碼打斷,則需要查看Web服務器返回的響應。有時,您甚至不會在代碼中重新設置驗證碼;當您仍然可以使用瀏覽器訪問同一頁面時,它可能只是一個持續的超時錯誤。也可能是您會收到某種形式的50x錯誤。
四、如何有效地繞過驗證碼
在線填寫表單,發送太多典型的機器人請求時,您最有可能遇到驗證碼,或者它們只是在您根本不知道觸發它們的原因的情況下發生。一般來說,我們可以通過一些兩種方法解決驗證碼。
1)使用IP Rotation
避免觸發驗證碼的第一種方法是使用IP Rotation。輪換代理服務器使網站可以幫助隱藏真實IP地址並使用其他IP地址,並在一定時間間隔或每次請求後輪換分配給您請求的IP,從而在您發送的請求中識別IP足跡。
一般來說,您可以從Luminati,Smartproxy,Stormproxies和2CAPTCHA購買IP Rotation的服務。
為了安全起見,您可以使用Proxy API,也稱為網絡抓取API。
代理API不僅可以輪換IP,還可以打破驗證碼(如果出現的話)的阻攔。
Scraping API,Scrape Hunter和Crawlera是市場上一些最好的代理API。
隨機化請求之間的時間
殭屍程序具有預測性,重複性和超快性-網站可以將其用於您的殭屍程序。為了保護您的漫遊器免於觸發驗證碼,我建議您隨機分配兩次請求之間的時間間隔。
最好在請求之間設置延遲,以免網站被請求淹沒–這樣做不僅是為了避免Captcha,而且要對網站保持禮貌並避免造成損害。
避免Honeypots
如前所述,某些不可見元素可以引入網頁中。這些元素對使用瀏覽器的用戶不可見,但對漫遊器可見。通過與這些元素進行交互,您的機器人就可以直接引起人們的注意。
重要的是,檢查要與之交互的所有元素的CSS屬性,並確保未關閉可見性並且顯示未設置為隱藏。僅當這兩個屬性為您提供綠燈時,您才可以繼續進行操作並與元素進行交互。幸運的是,並非所有網站都使用此功能,但是對於使用該功能的網站,您必須要小心。
渲染所有JS代碼
大量的Web爬蟲沒有提供JavaScript,它們只是發送請求,完整下載頁面,解析出所需的數據,然後循環繼續。好了,即使您能夠在不渲染JavaScript的情況下訪問所有必需的數據,您仍將需要在某些網頁上渲染JS代碼,以避免觸發Captcha。
如果您遇到的網站會在某些JS代碼呈現之前觸發Captcha,則您需要找出要呈現的JS代碼並進行呈現。這可能是很多工作。因此,我建議您使用諸如Selenium之類的瀏覽器自動化工具。
避免使用直接鏈接
我必須承認,我確實使用直接鏈接,直到我確定某個網站可以利用它們來檢測機器人。 Web管理員意識到人們不僅訪問他們的頁面,還訪問其他頁面。它們是從其他頁面引用的。如果有大量直接鏈接請求傳入,則網站將處於防御狀態,並觸發驗證碼。建議您訪問要在其上訪問的鏈接的其他頁面,或者使用引薦來源標頭欺騙網站,以為您被引薦而不是僅發送直接鏈接請求。
2)使用2CAPTCHA的自動驗證碼識別服務
有時,無論您做什麼,都無法避免。例如,某些註冊頁面和其他填寫表單頁面的“提交”按鈕前都有Captcha,並且您必須先解決它們才能提交表單。那麼驗證碼怎麼識別?
在這種情況下,您無法避免-您必須解決它們。最有可能的是,您不想手動解決它們,而是希望它自動完成。那就是使用Captcha解決服務。
解決驗證碼的另一種方法是利用驗證碼識別服務,自動解決驗證碼識別網站的問題。這些服務利用人工智能,機器學習和許多其他技術來解決驗證碼。我會建議您使用付費的驗證碼服務,因為它們更有效。最好的驗證碼識別服務是由2Captcha提供的。
2CAPCHA的工作流程:
如果使用的是google 瀏覽器的話,可以直接使用2CAPTCHA的拓展程序,從而高效快捷地解決驗證碼識別問題。
2CAPCHA的驗證碼識別能力
我們的服務使用大量人員的人工進行識別,並且可以識別人類可以識別的任何人類可讀的驗證碼。甚至這是一款可以做到繞過登陸驗證碼軟件。此外,該服務不僅可以識別文本驗證碼,還可以識別任何圖形驗證碼,例如ReCaptcha V2,Adirra,FunCaptcha等。
另外,2CAPCHA還能有效識別hCaptcha。具體的教程見:Solving hCaptcha
總結
毫無疑問,在開發訪問Web服務不允許訪問的Web服務的自動化機器人時,您可以忽略Captcha,因為您很可能會遇到它們。
有趣的是,通過正確的思維方式以及將一些技術集成到您的機器人開發中,您可以避免觸發Captcha –這些技術已在上面進行了討論。但是,如果您必須解決Captcha的情況,則可以使用Captcha解決服務或代理API來 解決它們。